package com.utils;

import com.constant.MessageConstant;
import com.constant.RedisMessageConstant;
import com.result.Result;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

import java.util.Map;
import java.util.Random;

/**
 * 随机生成验证码工具类
 */
public class ValidateCodeUtils {

    @Test
    public void  test(){
        Integer integer = generateValidateCode(4);
        System.out.println(integer);
    }


    public static Result isValid(JedisPool jedisPool, Map paraMap, String sendType){
        Jedis jedis = jedisPool.getResource();
        String telephone = (String) paraMap.get("telephone");
        //校验验证码
        String codeInRedis = jedis.get(telephone + "_" + sendType);//拿到存在redis里面的验证码
        String codeInWeb = (String) paraMap.get("validateCode");//拿到从页面输入的验证码
        if(codeInRedis==null || codeInRedis==""){
            return new Result(false, MessageConstant.VALIDATECODE_ERRORR);
        }
        if(!codeInRedis.equals(codeInWeb)){
            //不相等，说明验证码不正确
            return new Result(false, MessageConstant.VALIDATECODE_ERROR);
        }
        return new Result(true, MessageConstant.VALIDATECODE_SUCCESS);
    }


    /**
     * 随机生成验证码
     * @param length 长度为4位或者6位
     * @return
     */
    public static Integer generateValidateCode(int length){
        Integer code =null;
        if(length == 4){
            code = new Random().nextInt(9999);//生成随机数，最大为9999
            if(code < 1000){
                code = code + 1000;//保证随机数为4位数字
            }
        }else if(length == 6){
            code = new Random().nextInt(999999);//生成随机数，最大为999999
            if(code < 100000){
                code = code + 100000;//保证随机数为6位数字
            }
        }else{
            throw new RuntimeException("只能生成4位或6位数字验证码");
        }
        return code;
    }

    /**
     * 随机生成指定长度字符串验证码
     * @param length 长度
     * @return
     */
    public static String generateValidateCode4String(int length){
        Random rdm = new Random();
        String hash1 = Integer.toHexString(rdm.nextInt());
        String capstr = hash1.substring(0, length);
        return capstr;
    }
}
